//package org.forum.chat.privatechat.serverpoint;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.UUID;
//
//import javax.servlet.http.HttpSession;
//import javax.websocket.EncodeException;
//import javax.websocket.EndpointConfig;
//import javax.websocket.OnClose;
//import javax.websocket.OnError;
//import javax.websocket.OnMessage;
//import javax.websocket.OnOpen;
//import javax.websocket.Session;
//import javax.websocket.server.ServerEndpoint;
//import javax.websocket.server.ServerEndpointConfig;
//
//import org.forum.chat.serverpoint.Message.ChatMessage;
//import org.forum.chat.serverpoint.Message.FindContactsMessage;
//import org.forum.chat.serverpoint.Message.LogoutMessage;
//import org.forum.chat.serverpoint.Message.Message;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
///**
// * 对Java EE要求，
// * 1、在登陆时建立HttpSession的同时也应该建立javax.websocket.Session;
// * 2、网页的聊天信息使用websocket协议标示是否有人发送消息.
// * 辅助工具要求：
// * 1、
// * 
// * 前端要求：
// * 1、发送的三种信息：
// * 	（1）、自登陆起，第一次对一个联系人发送消息；
// * 	（2）、发送了2次及以上以后对联系人发送的信息；
// * 	（3）、发出退出登陆信息。
// * @author One
// *
// */
//@ServerEndpoint(value="/chat-server",
//			configurator=ChatServerConfigurator.class)
//public class ChatServer {
//	
//	Logger logger = LoggerFactory.getLogger(ChatServer.class);
//	
//	//与客户端相关联的唯一session
//	private Session session;
//	
//	//全局配置
//	private ServerEndpointConfig endpointConfig;
//	
//	//记录当前所有的联系人
//	private List<String> users = null;
//	
//	//key:联系人的Username；value:聊天记录的唯一Id：UUID；
//	private Map<String, String> contactsUUID;
//	
//	//当前用户与多个人的聊天记录
////	private Map<String,Transcript> currentTranscripts;
//	
//	//所有用户的聊天记录
//	private Map<String, Transcript> allUserTranscripts;
//	
//	//所有用户的会话信息
//	private Map<String, HttpSession> sessions;
//	
//	
//	/**
//	 * 建立websocket连接
//	 * @param config
//	 * @param session
//	 */
//	@OnOpen
//	public void startChat(EndpointConfig config,Session session){
//		this.endpointConfig = (ServerEndpointConfig)config;
//		ChatServerConfigurator chatServerConfigurator = (ChatServerConfigurator)endpointConfig
//				.getConfigurator();
//		//获取所有的聊天记录
//		allUserTranscripts = chatServerConfigurator.getTranscripts();
//		//获取所有在线的用户的HttpSession
//		sessions = chatServerConfigurator.getSessions();
//		//
//		users = new ArrayList<>();
//		this.session = session;
//		if(logger.isDebugEnabled()){
//			logger.debug("websocket session创建成功！");
//		}
//	}
//	
//	/**
//	 * 目前仅实现两个用户都在线的情况下进行即时聊天
//	 * 1、检查通信对方是否在线；若不在线，则告诉用户联系人不在线，否则进行下一步；
//	 * 2、若是第一次发送消息给对方，需要建立历史信息记录对象（即Transcript）；
//	 * 3、保存信息在历史信息记录对象中；
//	 * 4、发送信息给对方。
//	 * @param config
//	 * @param session
//	 * @param message	接收到的经过转换的信息
//	 */
//	@OnMessage
//	public void receiveMessage(EndpointConfig config,Session session,Message message){
//		//判断此信息是属于哪一种信息
//		switch(message.getType()){
//			
//		case Message.FINDCONTACTSMESSAGE:
//			processFindContactsMessage((FindContactsMessage)message);
//			break;
//			
//		case Message.CHATMESSAGE:
//			processChatMessage((ChatMessage)message);
//			break;
//			
//		case Message.LOGOUTMESSAGE:
//			processLogoutMessage((LogoutMessage)message);
//			break;
//		}
//	}
//	
//	/**
//	 * 返回所有的当前在线的联系人
//	 * @param message
//	 */
//	private void processFindContactsMessage(FindContactsMessage message){
//		
//	}
//	
//	/**
//	 * 
//	 * @param message
//	 */
//	private void processChatMessage(ChatMessage message){
//		//判断联系人是否在线
//		if(null == sessions.get(message.getTo())){
//			message.setContent("联系人不在线");
//			sendMessageToClient(this.session,message);
//			return;
//		}
//		//判断此用户与联系人的聊天记录是否存在
//		Transcript transcript = getTranscript(message.getTo());
//		if(null == transcript){
//			//创建新的transcript
//			String uuid = UUID.randomUUID().toString();
//			transcript = new Transcript();
//			allUserTranscripts.put(uuid, transcript);
//		}
//		//记录此条聊天记录
//		
//		
//	}
//	
//	/**
//	 * 查找聊天记录思路：
//	 * 1、在contactsUUID查找到用户与对应联系人的聊天的key值（此值使用UUID）
//	 * 2、若不存在相应的UUID，则表明不存在相应的聊天记录
//	 * 3、若存在相应的UUID,则在currentTranscripts找出相应的Transcient
//	 * @return
//	 */
//	private Transcript getTranscript(String to){
//		String uuid;
//		if(null ==(uuid = contactsUUID.get(to))){
//			return null;
//		}
//		return allUserTranscripts.get(uuid);
//	}
//	
//	/**
//	 * 销毁相关的信息
//	 * @param message
//	 */
//	private void processLogoutMessage(LogoutMessage message){
//		
//	}
//	
//	/**
//	 * 发送消息至客户端
//	 * @param session
//	 * @param message
//	 */
//	private void sendMessageToClient(Session session,Message message){
//		try {
//			session.getBasicRemote().sendObject(message);
//		} catch (IOException e) {
//			if(logger.isDebugEnabled()){
//				logger.debug(e.getMessage());
//			}
//			e.printStackTrace();
//		} catch (EncodeException e) {
//			if(logger.isDebugEnabled()){
//				logger.debug(e.getMessage());
//			}
//		}
//	}
//	
//	@OnError
//	public void withError(){
//		
//	}
//	
//	@OnClose
//	public void chatEnd(){
//		
//	}
//	
//}
